package org.flixel.system.gdx.loaders; import org.flixel.FlxG; import org.flixel.event.IFlxShaderProgram; import org.flixel.gles20.FlxShaderProgram; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetLoaderParameters; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; /** * <code>AssetLoader</code> to create a <ProgramShader> from vertex and fragment file. * * @author Ka Wing Chin */ public class ShaderLoader extends AsynchronousAssetLoader<FlxShaderProgram, ShaderLoader.ShaderProgramParameter> { public ShaderLoader(FileHandleResolver resolver) { super(resolver); } @Override public void loadAsync(AssetManager manager, String fileName, FileHandle file, ShaderProgramParameter parameter) { } @Override public FlxShaderProgram loadSync(AssetManager manager, String fileName, FileHandle file, ShaderProgramParameter parameter) { String vertex; String fragment; if(parameter.vertex.startsWith("org/flixel")) vertex = Gdx.files.classpath(parameter.vertex).readString(); else vertex = Gdx.files.internal(parameter.vertex).readString(); if(parameter.fragment.startsWith("org/flixel")) fragment = Gdx.files.classpath(parameter.fragment).readString(); else fragment = Gdx.files.internal(parameter.fragment).readString(); FlxShaderProgram shader = new FlxShaderProgram(vertex, fragment, parameter.callback); FlxG.isShaderCompiled(shader); shader.loadShaderSettings(); return shader; } @SuppressWarnings("rawtypes") @Override public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, ShaderProgramParameter parameter) { return null; } /** * Parameter to be passed, in this case the path to the vertex and fragment * files. * * @author Ka Wing Chin */ static public class ShaderProgramParameter extends AssetLoaderParameters<FlxShaderProgram> { /** * The path to the vertex file. */ public String vertex; /** * The path to the fragment file. */ public String fragment; /** * The callback that will be fired on resume. */ public IFlxShaderProgram callback; } }